home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / tool / mondu / file_sel.doc < prev    next >
Text File  |  1995-02-11  |  11KB  |  220 lines

  1.  
  2.                     BASIC版 ファイル セレクター
  3.                                 制作:MONDU
  4.  
  5.          F-BASIC386で自作ツールに組み込んで使用できるTOWN
  6.         S-OSライクなファイルセレクターです。
  7.          実際の使用には不足する機能を補う必要がありますのでプログラム中
  8.         の注釈やドキュメント末に記載の変数表をご覧になってください。
  9.  
  10.          このプログラムの使用に関しては一切の制限を設けません。該当ファ
  11.         イルは以下の三点です。
  12.  
  13.             file_sel.bas
  14.             file_sel.doc
  15.             file_sel.ggg
  16.  
  17.             動作環境
  18.          F-BASIC386V2.1とその動作可能なマシン。つまりFM
  19.         TOWNS、FMTOWNSョ、MARTYどれでも動作可能なはずです。
  20.  
  21.             開発環境
  22.         機械 FM-TOWNS 40H
  23.          メモリー2MB  増設無し(当時)
  24.         OS Towns-OS V2.1L20
  25.          コンソール無し  サイドワーク有り
  26.         言語 F-BASIC386V2.1L10
  27.          マニュアル付き    (隠し命令の記載は嬉しいが誤記などは
  28.                             アフターケアがないのも含め感心できない。)
  29.  
  30.          DEF FONTやCLEARのDLL領域の指定、構造化IFの命令を用いていますの
  31.         で、V2専用とさせていただきますが改造次第ではV1でも決して実行
  32.         が不可能なわけではではありません。
  33.          ただしコンパイラでは使えません。申し訳ありませんが私には原因の
  34.         調べようもございませんのでその点はご容赦下さい。
  35.          ファイルセレクタに付けたプログラムは3行程度のTIFFロードです。
  36.          もちろん色数のチェックはしていませんので役に立つことはまず無い
  37.         でしょう。
  38.  
  39.           構成について
  40.  
  41.          プログラムは部品的な構成があるようで無いという中途半端な仕様で
  42.         すが変数に関係を持たせると使っている人にまでトリッキーな考え方を
  43.         要求するようになりますのでほどほどに抑えています。
  44.          各部に手抜きともとらえられるプログラムを施しています。
  45.          また、他の方がなさらない提案的な構成にさせていただきました。
  46.          そうした理由は足りない部分はこのソースを見ればよほどの初心者で
  47.         無いかぎりは自分の指で補えると思いましたし、その行為自体がBAS
  48.         ICのおもしろみだと思ったからです。
  49.          実際に作っていた私自身とても楽しいものでした。
  50.          私は他の言語について知らないことが多すぎるので大きな事は言えま
  51.         せんが、楽しく楽に動くものを作れるのはこの言語の強みだと思います。
  52.          最近のBASICユーザーの不満を言うわりに自分達からの歩み寄り
  53.         が見られないという悪い傾向が多く目につきます。
  54.          心当たりがある方にはとりあえずプログラムを書きためることをおす
  55.         すめします。
  56.  
  57.           プログラムの限定点
  58.  
  59.          まずドライブの変更ができません。ドライブ情報取得方法を限定でき
  60.         なかったのが大きな理由ですが無視してしまえば簡単です。ただしきち
  61.         んとエラートラップをしましょう。その際FILEN(N)を使っている場合は
  62.         ドライブ変更時にFILEN(0)=0としてファイル表示段の初期化をしてくだ
  63.         さい。また、ドライブ情報の取得はフリコレ8のLuzz-tumさん
  64.         のI/O操作プログラムが参考になりますので組み込んで御使用になる
  65.         とよいでしょう。こちらはV2.1が必要となっています。
  66.          ロールバーはつかめないうえ、まとめていくつか上下に動かすという
  67.         機能がありません。同じくロールバーの上下ボタンを参考にしてください。
  68.          取消ボタンは機能を持っていませんクローズボタン、実行ボタンを参
  69.         考にしてください。
  70.          ファイル名の書き込みができません。正直に言いますと対応策が見つ
  71.         かりませんでした。SATTさんのString EDIT Syst
  72.         em "ses.bas"を参考にしてみるとよいのではないでしょうか。
  73.  
  74.           改造のポイント
  75.  
  76.          一部の変数については要素を増やすことによって複数ウィンドウを開
  77.         くようなことができます。ただし機能の不一致から部品的な管理が必要
  78.         でしょう。
  79.          サブルーチン化できる場所があると思いますがなにかしらの数値を割
  80.         り当ててしまわないことには作業の分岐ができません。
  81.          無駄を省こうと思えばかなり目につく所がありますが削除する場合は
  82.         変数の関係を把握したあとにした方がよいと思います。
  83.          ファイル表示部が遅くちらつきがありますからここにメモリを消費し
  84.         てみるのもいいかもしれません。
  85.          ファイルのソートは標準にしてありますがいろいろな変更ができます。
  86.         ワイルドカードは"????????.???"としてあります。アスタリスクは使え
  87.         ないようですのでお気をつけください。
  88.          サブディレクトリの頭出し機能は問題なく動きますが完全でもありま
  89.         せん。取り除く場合は関係する変数を検索してみてください。*UP、*DO
  90.         WNそれとファイルソート直後のFILEOFFSETを指定しているIF文、あとDI
  91.         M、ERASEにあります。
  92.  
  93.           プロシジャーについて
  94.  
  95.          このプログラムではOcToh[オクト]さんが作られたF-BAS
  96.         IC386用REXユーティリティ"BAS_LIB.REX"を読み込んでいます。
  97.         本プログラムを御試用の際は同ディレクトリ上にBAS_LIB.REXを御用意
  98.         下さい。CALLMに使用した変数は大体がそのドキュメントのものと同じ
  99.         名前にしておりますので詳しくはそちらをご覧ください。
  100.          また、試験用に作ったプログラムもBAS_LIB.REX用のサンプルとして
  101.         同封致しましたので足掛かりが欲しいといった方はとうぞ御活用下さい。
  102.  
  103.             最後に
  104.  
  105.          実はメニューバー部分も作っていたのですがまだウィンドウとつなが
  106.         る段階ではありませんしとりあえず必要な場面が思い浮かびませんので
  107.         続きを作る予定はありません。
  108.          複数のウィンドウの機能の情報管理は思ったより大きなプログラムに
  109.         なりそうでしたからこのまま固まらない作りを重ねてみようかと思って
  110.         います。
  111.          純粋にGUI環境のみを求めるのでしたらGEARを参考にボタン形
  112.         状や機能の変数を設定し指定値を割り当ててみるのもよろしいでしょう。
  113.  
  114.           変数について
  115.  
  116.     WINSIGN$    ウィンドウに表示される文字です。
  117.                    最大14文字位を予想してプログラムしています。
  118.     WININF(N)   ウィンドウ表示位置左上の座標(WININF(0),WININF(1))
  119.                右下の座標(WININF(0)+WININF(2),WININF(1)+WININF(3))
  120.                 ただしこれはオリジナルスクリーン座標のことで
  121.                WINDOW命令後ワールド座標(0,0)-(WININF(1),WININF(2))
  122.                がウィンドウの表示領域になります。
  123.                 スクリーン座標を使う命令(GET@、PUT@、MOUSE)は
  124.                X座標Y座標からそれぞれWINDOW(0)、WINDOW(1)を引くことで
  125.                ウィンドウに対応できます。
  126.     WINBUF      ウィンドウ表示領域画像の退避用バッファです。
  127.                 2画面を使ったり、再描画を自前のデータで行うようにすれば
  128.                全く不要になります。
  129.  
  130.     ICN_~&     CL,UP,DWとありそれぞれクローズボタン、ロールバー
  131.                アップボタン、ダウンボタンのPUT@用の配列となっています。
  132.                さすがに軽くて早いです。
  133.  
  134.     BOX(B,N)    ウィンドウ内の読み取り順位B番目の短形領域座標を
  135.               (BOX(B,0),BOX(B,1))-(BOX(B,2),BOX(B,3))としています。
  136.                 下にその割り当てを書いておきます。
  137.             BOX(0,N) クローズボタン
  138.             BOX(1,N) 実行ボタン
  139.             BOX(2,N) 取消ボタン            機能を付けていません。
  140.             BOX(3,N) ファイル選択部
  141.             BOX(4,N) 選択ファイル名
  142.             BOX(5,N) ロールバー            つかめません。
  143.             BOX(6,N) ロールバー後ろ        動きません。
  144.             BOX(7,N) ロールバーひとつ上
  145.             BOX(8,N) ロールバーひとつ下
  146.             BOX(9,N) ロールバーダミー
  147.                       デザイン修正時に付け加えました。
  148.                       ロールバー部全体を1ドット囲うものです。
  149.                       なくてもいいです。
  150.             BOX(10,N) 親ディレクトリへ
  151.             BOX(11,N) サブディレクトリへ
  152.             BOX(12,N) ドライブ左           設定さえしていません。
  153.             BOX(13,N) ドライブ右           同上
  154.             BOX(14,N) ドライブ変更         同上
  155.             BOX(15,N) ウィンドウ移動       周りの黒い部分を取り除いています。
  156.             BOX(16,N) ウィンドウダミー     上の残りの部分を拾います。
  157.     BOXNUM      下記Bに許される最大値です。
  158.     B           ON GOTOに使ったり描画領域の指定値に使っています。
  159.     BBACK       Bを壊さないように退避させます。
  160.     FNPB(B)     内部でBOX(B,N)を参照しマウスカーソルが中にあるか調べます。
  161.                 もちろんMOUSE関数はWINDOW関数を差し引いています。
  162.     PABDB       上記FNPB(B)を固定する時これに代入します。
  163.     PANDBBACK   上記PANDBの変化を追う時に使用します。
  164.                 変化があれば処理を行いまたPANDBと同じ値にします。
  165.                 マウスドラッグ時のボタンの反転処理に使います
  166.  
  167.     ROOT        親ディレクトリの有無です。
  168.                 主にファイル数に対する修正値の役目をします。
  169.                 *UP、*DOWNでも参照しています。
  170.     FILENAME$   ファイル名受渡し用です。
  171.     FILEN       マークしているファイルの番号です。
  172.                 番号は上からの物で0はマーク無を意味します。
  173.                 *SEL内では表示部分のみを処理対象にし
  174.                 FILEOFFSETを引いて使っています。
  175.     FILEN$(N)   BAS_LIB.REXルーチン0によって得たファイル名です。
  176.                 順番を入れ換える以外は手を付けていません。
  177.                 ただしROOTを使ってD.とD..を表示しないようにしています。
  178.                 DIM FILEN$(999)なんてことをしているので修正してください。
  179.     FILENUM     ファイルの数です。
  180.                 ファイルが無い時は0です。
  181.                 実際にはROOTをたしてつかってます。
  182.                 <.>と<..>を無くし<親ディレクトリ>を表示するからです。
  183.                 <.>や<..>が好きな方はこの処理を削除すればよいのですが、
  184.                 ROOT自体は削らない方が良いでしょう。
  185.     FILEOFFSET  ファイル表示部の表示開始番号です。
  186.                 0のとき先頭から表示します。
  187.  
  188.     FILEN(N)    親ディレクトリに行った時のファイル表示位置に修正しいます。
  189.                 このデータがない時は出てきたディレクトリが
  190.                 上から5番目に来るようにしています。
  191.                 複数のドライブには対応していません。
  192.     FILENP      SEARCHを使い上記FILEN(N)に対するデータの
  193.                書き込み位置読み込み位置を指定します。
  194.     FILENBACK   FILEN(N)で得たデータをこれに渡します。
  195.  
  196.     MODE        ウィンドウのクローズボタンの押し方2つをまとめるために
  197.                用意しましたが、違う方法もありそうです。
  198.  
  199.     M_AND(n)$   小さなマウスカーソル用のデータです。
  200.     M_DOT(n)$   それぞれ4パターンずつ有ります。
  201.  
  202.     RET&        CALLMのリターン値です。
  203.                 今回触れていませんので実用プログラムにする場合は
  204.                エラートラップをした方がいいですね。
  205.     CRDCODE     カレントディスクのアスキーコード。
  206.     GCRDNBUF$   カレントディレクトリ名。
  207.     DIR$        ルートを取り除いたカレントディレクトリ名。
  208.     SEARCHFILE$ 探すファイル名。
  209.                 全部?にしました。
  210.  
  211.     XOLD  YOLD  *WIN_MOVE内で使っています。
  212.                MOUSEを何度も書きたくなかったのでこうしました。
  213.     X     Y     マウスカーソル位置にウィンドウ関数で修正した値です。
  214.     XBACK YBACK XとYの変化を追うための値です。
  215.  
  216.     I           FOR文に使っています。
  217.  
  218.     X,Y,Z,W     BOX(B,N)を代入して楽しようとしました。
  219.                主に描画ルーチンで使っています。
  220.